﻿Imports Commander_Wars.Spieletools
Public Class ObjektSpielMenü
    Inherits ObjektFormMenü



    Enum Spielmodi
        Nichts
        Einheitausgewählt
        Gebäudeausgewählt
        AuswahlmenüEinheit
        FeuerradiusAnzeigen
        Angriff
        Entladen
        SiloAbfeuern
        GebäudeSchuss
        Reparieren
        Abzug
        Explosion
        TagZuTagAnzeige
        Minimap
        Tor1Bauen
        Tor2Bauen
        Tor3Bauen
        OmegaRaketeZünden
        GebäudeBauen
        KOInfoAnzeige
        ''' <summary>
        ''' Momentan sprechen irgendwelche KO's irgendetwas?
        ''' </summary>
        ''' <remarks></remarks>
        KOSprechen
        ''' <summary>
        ''' Man kann Einheiten in Flugzeugträgern bauen.
        ''' </summary>
        ''' <remarks></remarks>
        FlugzeugTrägerBauen
        ''' <summary>
        ''' So wir wollen also etwas aufdecken.
        ''' </summary>
        ''' <remarks></remarks>
        Leuchtrakete
        ''' <summary>
        ''' Wir wollen eine Brücke bauen
        ''' </summary>
        ''' <remarks></remarks>
        BrückeBauen
        ''' <summary>
        ''' Wir wollen eine Mauer bauen
        ''' </summary>
        ''' <remarks></remarks>
        MauerBauen
        ''' <summary>
        ''' Wir wollen Anzeigen in welchem Bereich eine Einheit einen Boost erhält!
        ''' </summary>
        ''' <remarks></remarks>
        RangReichweiteAnzeigen
    End Enum
    Public Spielmodus As Spielmodi = Spielmodi.Nichts
    Public ZuentladendeEinheit As Integer
    Public isChat As Boolean = False
    Dim Chat As ObjektChat
    Dim OldSize As Size = Hauptmenü.MainMenü.Size
    Public Sub New(ByVal Spielstand As Boolean, Optional ByVal Startspieler As Integer = 1)
        MyBase.New(New ObjektButton() {}, Nothing, New ObjektNumericUpDown() {}, Nothing, New ObjektValueSchieber() {}, New ObjektMultiValue() {}, New ObjektCheckBox() {})
        If My.Settings.Verhältnis = Hauptmenü.Breitbild Then
            Objektverwalter.LoadHintergrund(My.Settings.Resourcenpfad + "Hintergründe\SpielHintergundGroß.png")
        Else
            Objektverwalter.LoadHintergrund(My.Settings.Resourcenpfad + "Hintergründe\SpielHintergund.png")
        End If

        'Wir initialisieren das Spiel
        If Spielstand = False Then
            Objektverwalter.Spielfeld.Runde = 0
            Objektverwalter.Spielfeld.AktuellerSpieler = Objektverwalter.Spielfeld.Spieler(Startspieler)
            Objektverwalter.Spielfeld.SpielStart()
        Else
            'Tja jetzt müssen die KO's geladen werden()
            For Each Spieler In Objektverwalter.Spielfeld.Spieler
                For Each KO In Spieler.KOS
                    If Not KO Is Nothing Then
                        KO.KONachSpielstandladenLaden()
                    End If
                Next
            Next
        End If
        Objektverwalter.VomRandEntfernen(True)
        Objektverwalter.Spielfeld.Sichterstellen()
        ObjektMaus.Zustand = ObjektMaus.Zustände.Normal
        AutoResizeWindow()
        Hauptmenü.Rechteck.Width = Hauptmenü.MainMenü.Size.Width
        Hauptmenü.Rechteck.Height = Hauptmenü.MainMenü.Size.Height
    End Sub
    Public Overrides Sub Frame()
        If Not Objektverwalter.Spielfeld.AktuellerSpieler.KIStufe = ObjektSpieler.KIStufen.Mensch Then

        End If
        Hauptmenü.SpielfeldScrollen()
    End Sub

    Private Sub FinishChat()
        Chat.RemoveHandles()
        Chat = Nothing
        isChat = False
    End Sub
    Public Overrides Sub KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)


        If isChat Then 'Chatten wir?
            If e.KeyCode = Keys.Enter Then
                'Chat abschicken.
                Hauptmenü.NetzChatSenden(Chat.Text)
                'Try's if this is a cheat
                Cheat(Chat.Text)

                FinishChat()
            ElseIf e.KeyCode = Keys.Escape Then

               FinishChat
            End If
            Exit Sub 'wir sollen ja jetzt keine Befehle geben sondern Chatten.
        Else
            'oder wollen wir anfangen zu chatten?
            If e.KeyCode = My.Settings.Chat Then
                isChat = True
                Chat = New ObjektChat
                Exit Sub
            End If
        End If
        'wir dürfen nur etwas tun wenn keine Animationen existieren
        If Objektverwalter.Spielfeld.Animationen.Length > 0 Then Exit Sub
        If BackbufferSpiel.GetBufferLength > 0 Then Exit Sub
        If Objektverwalter.Spielfeld.EingabenErlauben = True Then
            If Spielmodus = Spielmodi.KOInfoAnzeige Then
                Objektverwalter.Spielfeld.KOInfos.KeyDown(sender, e)
                Exit Sub
            End If
            Select Case e.KeyCode
                Case Keys.Escape
                    Dispose()
                Case My.Settings.Oben
                    CursorVerschieben(0, -1)
                Case My.Settings.Unten
                    CursorVerschieben(0, 1)
                Case My.Settings.Rechts
                    CursorVerschieben(1, 0)
                Case My.Settings.Links
                    CursorVerschieben(-1, 0)
                Case My.Settings.Bestätigen
                    Dim Maus As New System.Windows.Forms.MouseEventArgs(Windows.Forms.MouseButtons.Left, 1, ObjektMaus.XKoordinate, ObjektMaus.YKoordinate, 0)
                    MouseDown(sender, Maus)
                Case My.Settings.Abrechen
                    Dim Maus As New System.Windows.Forms.MouseEventArgs(Windows.Forms.MouseButtons.Right, 1, ObjektMaus.XKoordinate, ObjektMaus.YKoordinate, 0)
                    MouseDown(sender, Maus)
                    MouseMove(sender, Maus)
                Case My.Settings.NächsteEinheit
                    Objektverwalter.Spielfeld.NächsteEinheit()
                Case My.Settings.SelectTaste
                    If Spielmodus = Spielmodi.Nichts Or Spielmodus = Spielmodi.Minimap Then
                        If IsNothing(Objektverwalter.Minimap) = False Then
                            Objektverwalter.Minimap = Nothing
                            Spielmodus = Spielmodi.Nichts
                        Else
                            Spielmodus = Spielmodi.Minimap
                            Objektverwalter.Minimap = New ObjektMinimap(Objektverwalter.Spielfeld, Nothing)
                        End If
                    End If
                    'Ich liebe schnellspeichern & Laden :)
                Case My.Settings.Quicksave1 'Ich weiß allerdings nicht, wie das so in Netzwerkspielen ist... Könnte Probleme bereiten...
                    Hauptmenü.Speichern("Quicksave1", ".sav")
                Case My.Settings.Quicksave2
                    Hauptmenü.Speichern("Quicksave2", ".sav")
                Case My.Settings.Quickload1
                    Hauptmenü.Laden("Quicksave1", False, ".sav")
                Case My.Settings.Quickload2
                    Hauptmenü.Laden("Quicksave2", False, ".sav")
                Case Keys.Z
                    If e.Control Then
                        'Rückgängig... so richtig mach ich's ja nicht. Allerdings speichern wir immer wieder und in sofern könnte es klappen indem wir wieder laden. (Es kann natürlich auch sein, dass du damit alles kaput machst :(
                        If e.Alt Then
                            'Das Rückgängig scheint Missglückt zu sein. Zum Glück haben wir einen Sicherheitsstand gemacht.
                            Hauptmenü.Laden("AutospeichernSicherheit", False, ".sav")
                        Else
                            'Bevor wir einen Stand laden, speichern wir unseren jetztigen lieber nochmal ab...
                            Hauptmenü.Speichern("AutospeichernSicherheit", ".sav")
                            Objektverwalter.AutospeicherIndex -= 1
                            If Objektverwalter.AutospeicherIndex < 0 Then Objektverwalter.AutospeicherIndex = 5
                            Hauptmenü.Laden("Autospeichern" + Objektverwalter.AutospeicherIndex.ToString, False, ".sav")
                        End If
                        Objektverwalter.Spielfeld.SpielWiederaufnehmen()
                    End If
                Case My.Settings.Schlachtwechsel
                    Objektverwalter.Spielfeld.SchlachtWechseln()


            End Select
        Else
            Select Case e.KeyCode
                Case Keys.Escape
                    Hauptmenü.Ini(Hauptmenü.Formmodi.SiegMenü)
            End Select
        End If
    End Sub

    ''' <summary>
    ''' Some cheats for some Gametests
    ''' </summary>
    ''' <param name="Code"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function Cheat(ByVal Code As String)
        If Not Hauptmenü.NetzConnected Then
            Select Case Code.ToLower
                Case "power of koshi"
                    'Kriegsnebel
                    If Objektverwalter.Spielfeld.Regeln.Nebel < Nebelarten.Kriegsnebel Then
                        Objektverwalter.Spielfeld.Regeln.Nebel += 1
                        Objektverwalter.Spielfeld.Sichterstellen()
                    End If
                Case "power of sonja"
                    Objektverwalter.Spielfeld.Regeln.Nebel = Nebelarten.Aus
                    Objektverwalter.Spielfeld.Sichterstellen()
                Case "power of colin"
                    Objektverwalter.Spielfeld.AktuellerSpieler.AddFonds(10000)
                Case "powercharge"
                    Objektverwalter.Spielfeld.AktuellerSpieler.KOS(0).Gabeleiste = (Objektverwalter.Spielfeld.AktuellerSpieler.KOS(0).Gabekosten + Objektverwalter.Spielfeld.AktuellerSpieler.KOS(0).SpezialgabeKosten) * Objektverwalter.Spielfeld.AktuellerSpieler.KOS(0).Sternkosten
                    If IsNothing(Objektverwalter.Spielfeld.AktuellerSpieler.KOS(1)) = False Then
                        Objektverwalter.Spielfeld.AktuellerSpieler.KOS(1).Gabeleiste = (Objektverwalter.Spielfeld.AktuellerSpieler.KOS(1).Gabekosten + Objektverwalter.Spielfeld.AktuellerSpieler.KOS(1).SpezialgabeKosten) * Objektverwalter.Spielfeld.AktuellerSpieler.KOS(1).Sternkosten
                    End If
                Case "power of animation"
                    'Kampfanimationen
                    My.Settings.KampfAnimationen = Not My.Settings.KampfAnimationen
                Case "power of sami"
                    For I = 0 To Objektverwalter.Spielfeld.Spieler.Length - 1
                        If Objektverwalter.Spielfeld.Spieler(I).Team <> Objektverwalter.Spielfeld.AktuellerSpieler.Team Then
                            Objektverwalter.Spielfeld.Regeln.Besiegt(I) = True
                        Else
                            Objektverwalter.Spielfeld.Regeln.Besiegt(I) = False
                        End If
                    Next
                    Objektverwalter.Spielfeld.Regeln.CheckSieg()

                Case "change debug mode"
                    'Schaltet in den Debug-Mouds um
                    Hauptmenü.Debbuging = Not Hauptmenü.Debbuging
                Case Else
                    Return False
            End Select
            Return True
        Else
            Return False
        End If
    End Function
    

    Public Overrides Sub Malen()
        MyBase.ObjekteMalen()
    End Sub

    Public Overrides Sub MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        'wir dürfen nur etwas tun wenn keine Animationen existieren

        Select Case e.Button
            Case MouseButtons.Middle
                ButtonGeklicktMitte(e)
        End Select
        If Hauptmenü.AufzeichnungAbspielen Then AufzeichnungsMouseDown(e)
        If Objektverwalter.Spielfeld.Animationen.Length > 0 Then Exit Sub
        If BackbufferSpiel.GetBufferLength > 0 Then Exit Sub
        If Objektverwalter.Spielfeld.EingabenErlauben = True Then
            Dim X As Integer = Hauptmenü.SpielfeldPunkt.X
            Dim Y As Integer = Hauptmenü.SpielfeldPunkt.Y
            Dim Funktion As String = ""
            If e.Button = Windows.Forms.MouseButtons.Left Then
                Funktion = checkMouseUPObjekte(e.X, e.Y)
            End If
            If Funktion = "" Then
                Select Case e.Button
                    Case Windows.Forms.MouseButtons.Left
                        'Wir berechnen die Kordinaten in Feldern

                        If X >= 0 And Y >= 0 And X < Objektverwalter.Spielfeld.Breite And Y < Objektverwalter.Spielfeld.Höhe Then
                            Select Case Spielmodus
                                Case Spielmodi.Nichts
                                    If IsNothing(Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht)) = False Then
                                        If Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).HatsichBewegt = False Then
                                            Objektverwalter.Einheitauswählen(X, Y)
                                        Else
                                            Objektverwalter.AuswahlMenüerschaffen()
                                        End If
                                    ElseIf IsNothing(Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude) = False Then
                                        Objektverwalter.Gebäudeauswählen(Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude.Rechteck.X, Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude.Rechteck.Y)
                                    Else
                                        Objektverwalter.AuswahlMenüerschaffen()
                                    End If
                                Case Spielmodi.Einheitausgewählt
                                    If Objektverwalter.Spielfeld.AktuelleEinheit.Spieler = Objektverwalter.Spielfeld.AktuellerSpieler.Spieler And Objektverwalter.Spielfeld.AktuelleEinheit.HatsichBewegt = False Then
                                        EinheitBewegungsBefehl(X, Y)
                                    Else

                                    End If
                                Case Spielmodi.Angriff
                                    If Objektverwalter.ExistiertMarkiertesFeldschon(X, Y) = True Then
                                        Objektverwalter.MarkierteFelder.Clear()
                                        If IsNothing(Objektverwalter.Spielfeld.Laufen) Then
                                            Objektverwalter.Angriff(Objektverwalter.Spielfeld.AktuelleEinheit, X, Y)
                                        Else
                                            Objektverwalter.Angriff(Objektverwalter.Spielfeld.AktuelleEinheit, X, Y)
                                        End If
                                    End If
                                Case Spielmodi.BrückeBauen
                                    If Objektverwalter.ExistiertMarkiertesFeldschon(X, Y) = True Then
                                        Objektverwalter.MarkierteFelder.Clear()
                                        If IsNothing(Objektverwalter.Spielfeld.Laufen) Then
                                            Objektverwalter.MauerBrückeBauen(X, Y)
                                        Else
                                            Objektverwalter.MauerBrückeBauen(X, Y)
                                        End If
                                    End If
                                Case Spielmodi.MauerBauen
                                    If Objektverwalter.ExistiertMarkiertesFeldschon(X, Y) = True Then
                                        Objektverwalter.MarkierteFelder.Clear()
                                        If IsNothing(Objektverwalter.Spielfeld.Laufen) Then
                                            Objektverwalter.MauerBrückeBauen(X, Y)
                                        Else
                                            Objektverwalter.MauerBrückeBauen(X, Y)
                                        End If
                                    End If
                                Case Spielmodi.Leuchtrakete
                                    If Objektverwalter.ExistiertMarkiertesFeldschon(X, Y) = True Then
                                        Objektverwalter.LechtraketeAbfeuern(X, Y)
                                    End If
                                Case Spielmodi.Entladen
                                    If Objektverwalter.ExistiertMarkiertesFeldschon(X, Y) = True Then
                                        Objektverwalter.MarkierteFelder.Clear()
                                        Objektverwalter.Entladen(X, Y, ZuentladendeEinheit)
                                    End If
                                Case Spielmodi.SiloAbfeuern
                                    Objektverwalter.SiloZünden(X, Y)
                                Case Spielmodi.GebäudeSchuss
                                    If Objektverwalter.ExistiertMarkiertesFeldschon(X, Y) = True Then
                                        Objektverwalter.Spielfeld.Landschaften(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude.Feuer(X, Y)
                                        Objektverwalter.MarkierteFelder.Clear()
                                        Spielmodus = Spielmodi.Nichts
                                    End If
                                Case Spielmodi.Reparieren
                                    If Objektverwalter.ExistiertMarkiertesFeldschon(X, Y) = True Then
                                        Objektverwalter.Reparieren(X, Y)
                                    End If
                                Case Spielmodi.Abzug
                                    Objektverwalter.EinheitAbziehen(X, Y, True)
                                Case Spielmodi.Explosion
                                    Objektverwalter.Explosion()
                                Case Spielmodi.TagZuTagAnzeige
                                    Spielmodus = Spielmodi.Abzug
                                    Objektverwalter.Spielfeld.RundenAnfangAnzeige.Frames = RundenAnfangBild.FrameMax
                                Case Spielmodi.Minimap
                                    Objektverwalter.Minimap = Nothing
                                    Spielmodus = Spielmodi.Nichts
                                Case Spielmodi.OmegaRaketeZünden
                                    Dim O As GebäudeOmega_Rakete = Objektverwalter.Spielfeld.Landschaften(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude
                                    O.RaketeStarten(X, Y)
                                    'In Arbeit
                            End Select
                        End If
                    Case Windows.Forms.MouseButtons.Right
                        Select Case Spielmodus
                            Case Spielmodi.Minimap
                                Objektverwalter.Minimap = Nothing
                                Spielmodus = Spielmodi.Nichts
                            Case Spielmodi.Einheitausgewählt
                                Objektverwalter.Einheitabwählen()
                            Case Spielmodi.FeuerradiusAnzeigen
                                Objektverwalter.MarkierteFelder.Clear()
                                If My.Settings.CommanderWarsGameMoodus = CommanderWarsGameModi.CommanderWars2 Then
                                    If Objektverwalter.ShowRangZone(Hauptmenü.SpielfeldPunkt.X, Hauptmenü.SpielfeldPunkt.Y) Then
                                        Spielmodus = Spielmodi.RangReichweiteAnzeigen
                                    Else
                                        Spielmodus = Spielmodi.Nichts
                                    End If
                                Else
                                    Spielmodus = Spielmodi.Nichts
                                End If
                            Case Spielmodi.RangReichweiteAnzeigen
                                Objektverwalter.MarkierteFelder.Clear()
                                Spielmodus = Spielmodi.Nichts
                            Case Spielmodi.AuswahlmenüEinheit
                                Hauptmenü.CursorPlazieren(Objektverwalter.EinheitenMenü.Feldpunkt.X * Hauptmenü.Feldbreite, Objektverwalter.EinheitenMenü.Feldpunkt.Y * Hauptmenü.Feldbreite)
                                Objektverwalter.EinheitenMenü = Nothing
                                ObjektMaus.Visible = True
                                Objektverwalter.Einheitabwählen()
                            Case Spielmodi.Nichts
                                If X >= 0 And Y >= 0 And X < Objektverwalter.Spielfeld.Breite And Y < Objektverwalter.Spielfeld.Höhe Then
                                    If IsNothing(Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht)) = False Then
                                        If Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Sichtbar = True Then
                                            If Not Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Waffe1 = "Keine" Then
                                                FeuerradiusAnzeigen(X, Y)
                                            ElseIf Not Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Waffe2 = "Keine" Then
                                                FeuerradiusAnzeigen(X, Y)
                                            End If
                                        End If
                                    ElseIf IsNothing(Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude) = False Then
                                        Objektverwalter.Spielfeld.Landschaften(Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude.Rechteck.X, Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude.Rechteck.Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude.FeuerradiusAnzeigen()
                                    End If
                                End If
                            Case Spielmodi.Angriff
                                Objektverwalter.MarkierteFelder.Clear()
                                Objektverwalter.Spielfeld.AngriffsAnzeige = Nothing
                                Objektverwalter.Befehlsmenüerschaffen()
                            Case Spielmodi.BrückeBauen
                                Objektverwalter.MarkierteFelder.Clear()
                                Objektverwalter.Befehlsmenüerschaffen()
                            Case Spielmodi.MauerBauen
                                Objektverwalter.MarkierteFelder.Clear()
                                Objektverwalter.Befehlsmenüerschaffen()
                            Case Spielmodi.Leuchtrakete
                                Objektverwalter.MarkierteFelder.Clear()
                                Objektverwalter.Befehlsmenüerschaffen()
                            Case Spielmodi.Entladen
                                Objektverwalter.MarkierteFelder.Clear()
                                Objektverwalter.Befehlsmenüerschaffen()
                            Case Spielmodi.SiloAbfeuern
                                Objektverwalter.Befehlsmenüerschaffen()
                            Case Spielmodi.GebäudeSchuss
                                Objektverwalter.MarkierteFelder.Clear()
                                Spielmodus = Spielmodi.Nichts
                            Case Spielmodi.Reparieren
                                Objektverwalter.MarkierteFelder.Clear()
                                Objektverwalter.Befehlsmenüerschaffen()
                            Case Spielmodi.Abzug
                                Spielmodus = Spielmodi.Nichts
                            Case Spielmodi.Explosion
                                Objektverwalter.Befehlsmenüerschaffen()
                            Case Spielmodi.OmegaRaketeZünden
                                Objektverwalter.MarkierteFelder.Clear()
                                Spielmodus = Spielmodi.Nichts
                                Objektverwalter.Gebäudeauswählen(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y)
                            Case Spielmodi.GebäudeBauen
                                Objektverwalter.Befehlsmenüerschaffen()
                            Case Spielmodi.Tor1Bauen
                                Objektverwalter.MarkierteFelder.Clear()
                                Spielmodus = Spielmodi.Nichts
                                Objektverwalter.Gebäudeauswählen(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y)
                            Case Spielmodi.Tor2Bauen
                                Objektverwalter.MarkierteFelder.Clear()
                                Spielmodus = Spielmodi.Nichts
                                Objektverwalter.Gebäudeauswählen(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y)
                            Case Spielmodi.Tor3Bauen
                                Objektverwalter.MarkierteFelder.Clear()
                                Spielmodus = Spielmodi.Nichts
                                Objektverwalter.Gebäudeauswählen(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y)
                            Case Spielmodi.FlugzeugTrägerBauen
                                Objektverwalter.MarkierteFelder.Clear()
                                Objektverwalter.Befehlsmenüerschaffen()
                        End Select
                End Select
            Else
                SPStringBefehl(Funktion)
            End If
        Else
            Select Case e.Button
                Case Windows.Forms.MouseButtons.Left
                    Select Case Spielmodus
                        Case Spielmodi.Einheitausgewählt
                            If IsNothing(Objektverwalter.Spielfeld.Laufen) = False And Objektverwalter.Spielfeld.AktuellerSpieler.KIStufe = ObjektSpieler.KIStufen.Mensch Then
                                'Wir sind etwas in Eile die Einheit wird zum Ziel gesetzt
                                Objektverwalter.Spielfeld.Laufen.ZumZielSetzen()
                            End If
                    End Select
            End Select
        End If
    End Sub

    Public Overrides Sub MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        If Objektverwalter.Spielfeld.Animationen.Length > 0 Then Exit Sub
        Select Case Spielmodus
            Case Spielmodi.Einheitausgewählt
                If Hauptmenü.SpielfeldPunkt.X >= 0 And Hauptmenü.SpielfeldPunkt.Y >= 0 And Hauptmenü.SpielfeldPunkt.X < Objektverwalter.Spielfeld.Breite And Hauptmenü.SpielfeldPunkt.Y < Objektverwalter.Spielfeld.Höhe Then
                    If Objektverwalter.Spielfeld.EingabenErlauben = True Then
                        If Objektverwalter.Spielfeld.AktuellerSpieler.KIStufe = ObjektSpieler.KIStufen.Mensch Then
                            If IsNothing(Objektverwalter.Spielfeld.AktuelleEinheitPfeil) = False Then
                                Objektverwalter.Spielfeld.AktuelleEinheitPfeil.PfeilAktualisieren(Hauptmenü.SpielfeldPunkt.X, Hauptmenü.SpielfeldPunkt.Y)
                            End If
                        End If
                    End If
                End If
            Case Spielmodi.Nichts
                MouseMoveObjekte(e.X, e.Y)
            Case Spielmodi.AuswahlmenüEinheit
                MouseMoveObjekte(e.X, e.Y)
            Case Spielmodi.Tor1Bauen
                MouseMoveObjekte(e.X, e.Y)
            Case Spielmodi.Tor2Bauen
                MouseMoveObjekte(e.X, e.Y)
            Case Spielmodi.Tor3Bauen
                MouseMoveObjekte(e.X, e.Y)
            Case Spielmodi.FlugzeugTrägerBauen
                MouseMoveObjekte(e.X, e.Y)
        End Select
    End Sub

    Public Overrides Sub MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        Select Case e.Button
            Case MouseButtons.Middle
                ButtonHochMitte()
        End Select
        If BackbufferSpiel.GetBufferLength > 0 Then Exit Sub
        If Objektverwalter.Spielfeld.Animationen.Length > 0 Then Exit Sub
        If Objektverwalter.Spielfeld.EingabenErlauben = False Then Exit Sub
        Select Case e.Button
            Case MouseButtons.Left
                MouseUpLeft(e)
        End Select
    End Sub
    Public Sub MouseUpLeft(ByVal e As System.Windows.Forms.MouseEventArgs)
        If Objektverwalter.Spielfeld.Animationen.Length > 0 Then Exit Sub
        Select Case Spielmodus
            Case Spielmodi.FeuerradiusAnzeigen
                Objektverwalter.MarkierteFelder.Clear()
                Spielmodus = Spielmodi.Nichts
        End Select
    End Sub

    Public Overrides Sub MouseWheel(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        If My.Computer.Keyboard.CtrlKeyDown Or My.Settings.draw3D Then
            If Objektverwalter.Spielfeld IsNot Nothing Then
                With Objektverwalter.Spielfeld
                    'Mit Steuerrung will man bestimmt zoomen!
                    If e.Delta > 0 Then
                        .KameraHöhe /= 1.1
                        'If .KameraHöhe < 5 Then .KameraHöhe = 5
                    Else
                        .KameraHöhe *= 1.1
                    End If
                End With
            End If
        Else
            If Objektverwalter.Spielfeld.Animationen.Length > 0 Then Exit Sub
            Select Case Spielmodus
                Case Spielmodi.Nichts
                    If e.Delta > 0 Then
                        Objektverwalter.Spielfeld.NächsteEinheit()
                    Else
                        Objektverwalter.Spielfeld.LetzteEinheit()
                    End If

            End Select
        End If
    End Sub

    Public Overrides Sub SetMausBild()
        Select Case Spielmodus
            Case Spielmodi.Angriff
                ObjektMaus.Zustand = ObjektMaus.Zustände.Angriff
            Case Spielmodi.SiloAbfeuern
                ObjektMaus.Zustand = ObjektMaus.Zustände.SiloAnzeigeKlein
            Case Spielmodi.GebäudeSchuss
                ObjektMaus.Zustand = ObjektMaus.Zustände.Angriff
            Case Spielmodi.Abzug
                ObjektMaus.Zustand = ObjektMaus.Zustände.Abzug
            Case Spielmodi.Explosion
                ObjektMaus.Zustand = ObjektMaus.Zustände.SiloAnzeigeMittel
                If IsNothing(Objektverwalter.Spielfeld.Laufen) Then
                    Hauptmenü.CursorPlazieren(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X * Hauptmenü.Feldbreite, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y * Hauptmenü.Feldbreite)
                Else
                    Hauptmenü.CursorPlazieren(Objektverwalter.Spielfeld.Laufen.Position.X * Hauptmenü.Feldbreite, Objektverwalter.Spielfeld.Laufen.Position.Y * Hauptmenü.Feldbreite)
                End If
            Case Spielmodi.OmegaRaketeZünden
                ObjektMaus.Zustand = ObjektMaus.Zustände.SiloOmegaRakete
            Case Else
                ObjektMaus.Zustand = 1
        End Select
    End Sub

    Private Sub ButtonGeklicktMitte(ByVal E As System.Windows.Forms.MouseEventArgs)
        If My.Computer.Keyboard.CtrlKeyDown Then
            Hauptmenü.ScrollenKameraKippen = True
            Hauptmenü.ScrollenX = E.X
            Hauptmenü.ScrollenY = E.Y
        Else
            Hauptmenü.Scrollen = True
            Hauptmenü.ScrollenX = E.X
            Hauptmenü.ScrollenY = E.Y
        End If
    End Sub
    Private Sub ButtonHochMitte()
        If Objektverwalter.Spielfeld.Animationen.Length > 0 Then Exit Sub
        Hauptmenü.Scrollen = False
        Hauptmenü.ScrollenKameraKippen = False
    End Sub
    ''' <summary>
    ''' Führt je nach Text Eingang einen Spielbefehl aus.
    ''' </summary>
    ''' <param name="Funktion"></param>
    ''' <remarks></remarks>
    Public Sub SPStringBefehl(ByVal Funktion As String)
        MusikEngine.LoadWav(My.Settings.Resourcenpfad + "Sound\OK.wav", False)

        'Wir haben auf einen Menüpunkt geklickt
        Dim Auswahlmenülöschen As Boolean = True
        Select Case Funktion.ToLower
            Case "heilen"
                Objektverwalter.Spielfeld.Landschaften(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude.Feuer(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y)
                Hauptmenü.CursorPlazieren(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X * Hauptmenü.Feldbreite, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y * Hauptmenü.Feldbreite)
            Case "kugel feuern"
                Objektverwalter.Spielfeld.Landschaften(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude.Feuer(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y)
                Hauptmenü.CursorPlazieren(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X * Hauptmenü.Feldbreite, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y * Hauptmenü.Feldbreite)
            Case "laser"
                Objektverwalter.Spielfeld.Landschaften(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude.Feuer(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y)
                Hauptmenü.CursorPlazieren(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X * Hauptmenü.Feldbreite, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y * Hauptmenü.Feldbreite)
            Case "schuss"
                Objektverwalter.Spielfeld.Landschaften(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude.FeuerSchussMarkieren()
                If Objektverwalter.MarkierteFelder.Count = 0 Then
                    Spielmodus = Spielmodi.Nichts
                Else
                    Spielmodus = Spielmodi.GebäudeSchuss
                    Hauptmenü.CursorPlazieren(Objektverwalter.MarkierteFelder(0).X * Hauptmenü.Feldbreite, Objektverwalter.MarkierteFelder(0).Y * Hauptmenü.Feldbreite)
                End If
            Case "schocklaser"
                Objektverwalter.Spielfeld.Landschaften(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude.Feuer(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y)
                Hauptmenü.CursorPlazieren(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X * Hauptmenü.Feldbreite, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y * Hauptmenü.Feldbreite)
            Case "reparieren"
                Objektverwalter.ReparierenAnzeigen()
            Case "warten"
                Objektverwalter.Warten()
            Case "ko einheit"
                Objektverwalter.CreateKOEinheit()
            Case "fracht"
                Objektverwalter.Fracht()
            Case "einen"
                Objektverwalter.Einen()
            Case "feuer"
                Objektverwalter.Angriffanzeigen()
            Case "feuerrakete"
                Objektverwalter.LeuchtraketenZieleAbfeuern()
            Case "besetzen"
                Objektverwalter.Besetzen()
            Case "basis bauen"
                Objektverwalter.BuildTempBase()
            Case "tarnen"
                Objektverwalter.Tarnen()
            Case "auftauchen"
                Objektverwalter.Auftauchen()
            Case "ration"
                Objektverwalter.Ration(False, 4, Objektverwalter.Spielfeld.MomentaneSchlacht)
            Case "zünden"
                Spielmodus = Spielmodi.SiloAbfeuern
                Hauptmenü.CursorPlazieren(Objektverwalter.EinheitenMenü.Feldpunkt.X * Hauptmenü.Feldbreite, Objektverwalter.EinheitenMenü.Feldpunkt.Y * Hauptmenü.Feldbreite)
                Objektverwalter.EinheitenMenü = Nothing
            Case "explosion"
                Spielmodus = Spielmodi.Explosion
            Case "bauen"
                'Wir wollen mit einer Einheit ein Gebäude bauen
                If Not Objektverwalter.Spielfeld.Laufen Is Nothing Then
                    Objektverwalter.GebäudeBauMenüerschaffen(Objektverwalter.Spielfeld.Laufen.Position.X, Objektverwalter.Spielfeld.Laufen.Position.Y)
                Else
                    Objektverwalter.GebäudeBauMenüerschaffen(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y)
                End If
                Auswahlmenülöschen = False
            Case "truppenbau"
                If Not Objektverwalter.Spielfeld.Laufen Is Nothing Then
                    Objektverwalter.CreateBauMenü(Objektverwalter.Spielfeld.Laufen.Position.X, Objektverwalter.Spielfeld.Laufen.Position.Y)
                Else
                    Objektverwalter.CreateBauMenü(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y)
                End If
                Spielmodus = Spielmodi.FlugzeugTrägerBauen
                Auswahlmenülöschen = False
            Case "gabe"
                Spielmodus = Spielmodi.Nichts
                Objektverwalter.Spielfeld.AktuellerSpieler.KOS(0).Gabe()
            Case "spezialgabe"
                Spielmodus = Spielmodi.Nichts
                Objektverwalter.Spielfeld.AktuellerSpieler.KOS(0).Spezialgabe()
            Case "doppelgabe"
                Spielmodus = Spielmodi.Nichts
                Objektverwalter.Spielfeld.AktuellerSpieler.KOS(0).Doppelgabe()
            Case "musik"
                My.Settings.MusikSound = Not My.Settings.MusikSound
                My.Settings.Save()
                Spielmodus = Spielmodi.Nichts
            Case "abzug"
                Spielmodus = Spielmodi.Abzug
                Hauptmenü.CursorPlazieren(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X * Hauptmenü.Feldbreite, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y * Hauptmenü.Feldbreite)
            Case "nächster spieler"

                If Objektverwalter.Spielfeld.AktuellerSpieler.KIStufe <> ObjektSpieler.KIStufen.Passiv Then
                    Dim Befehl As KIPassivNetzwerk.Befehl
                    Befehl.Befehl = ObjektKI.KIModiExtern.RundenEnde
                    Befehl.KooX = -1
                    Befehl.KooY = -1
                    Befehl.WegX = New Integer() {-1}
                    Befehl.WegY = New Integer() {-1}
                    Befehl.OpferX = -1
                    Befehl.OpferY = -1
                    Befehl.AngreiferSchaden = -1
                    Befehl.Verteidigerschaden = -1
                    Befehl.Spieler = Objektverwalter.Spielfeld.AktuellerSpieler.Spieler
                    Hauptmenü.NetzBefehlSenden(Befehl)
                End If

                Objektverwalter.Spielfeld.RundenEnde()
                Hauptmenü.CursorPlazieren(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X * Hauptmenü.Feldbreite, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y * Hauptmenü.Feldbreite)
            Case "wechsel"
                Spielmodus = Spielmodi.Nichts
                Objektverwalter.Spielfeld.AktuellerSpieler.Wechsel()
            Case "beenden"
                Dispose()
                Exit Sub
            Case "speichern"
                Hauptmenü.SpielstandSpeichern()
                Spielmodus = Spielmodi.Nichts
            Case "ko"
                Spielmodus = Spielmodi.KOInfoAnzeige
                Objektverwalter.Spielfeld.KOInfos = New ObjektKOInformation(Hauptmenü.MainMenü.MalPanel.Width / 2 - ObjektKOInformation.Bildbreite / 2, Hauptmenü.MainMenü.MalPanel.Height / 2 - ObjektKOInformation.Bildhöhe / 2, New PointF(0.5#, 0.5#))
            Case "tor 1"
                Spielmodus = Spielmodi.Tor1Bauen
                Objektverwalter.Gebäudeauswählen(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y)
                Auswahlmenülöschen = False
            Case "tor 2"
                Spielmodus = Spielmodi.Tor2Bauen
                Objektverwalter.Gebäudeauswählen(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y)
                Auswahlmenülöschen = False
            Case "tor 3"
                Spielmodus = Spielmodi.Tor3Bauen
                Objektverwalter.Gebäudeauswählen(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y)
                Auswahlmenülöschen = False
                'Die nachfolgenden 6 Befehle gehören zur Omega-Rakete und deren Bau
            Case "raketenantrieb"
                Dim O As GebäudeOmega_Rakete = Objektverwalter.Spielfeld.Landschaften(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude
                O.ErweiterungKaufen("Raketenantrieb")
            Case "raketenrumpf"
                Dim O As GebäudeOmega_Rakete = Objektverwalter.Spielfeld.Landschaften(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude
                O.ErweiterungKaufen("Raketenrumpf")
            Case "sprengstoffkapsel"
                Dim O As GebäudeOmega_Rakete = Objektverwalter.Spielfeld.Landschaften(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude
                O.ErweiterungKaufen("Sprengstoffkapsel")
            Case "sprengstoff"
                Dim O As GebäudeOmega_Rakete = Objektverwalter.Spielfeld.Landschaften(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude
                O.ErweiterungKaufen("Sprengstoff")
            Case "zielsuchsystem"
                Dim O As GebäudeOmega_Rakete = Objektverwalter.Spielfeld.Landschaften(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude
                O.ErweiterungKaufen("Zielsuchsystem")
            Case "omega-rakete zünden"
                'Hähä! Jetzt macht es gleich Boooom und zwar richtig.=D
                Spielmodus = Spielmodi.OmegaRaketeZünden
            Case "schlacht wechsel"
                Objektverwalter.Spielfeld.SchlachtWechseln()
                Spielmodus = Spielmodi.Nichts
            Case "einheit schicken"
                Objektverwalter.Schicken()
            Case Else
                If IsNothing(Objektverwalter.Spielfeld.AktuelleEinheit) Then
                    If IsNothing(Objektverwalter.Spielfeld.Landschaften(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude) = False Then
                        If Spielmodus = Spielmodi.Tor1Bauen Or Spielmodus = Spielmodi.Tor2Bauen Or Spielmodus = Spielmodi.Tor3Bauen Then
                            'Die Fabrik braucht keine Zielkoordinaten
                            Dim F As GebäudeFabrik = Objektverwalter.Spielfeld.Landschaften(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude
                            Select Case Spielmodus
                                Case Spielmodi.Tor1Bauen
                                    F.Variablen(0).Wert = F.Variablen(0).Wert - 1
                                    F.Bauen(Objektverwalter.EinheitenMenü.Tags(Objektverwalter.EinheitenMenü.GetCursorPosition), F.Rechteck.X - 1, F.Rechteck.Y + 2)
                                Case Spielmodi.Tor2Bauen
                                    F.Variablen(0).Wert = F.Variablen(0).Wert - 2
                                    F.Bauen(Objektverwalter.EinheitenMenü.Tags(Objektverwalter.EinheitenMenü.GetCursorPosition), F.Rechteck.X, F.Rechteck.Y + 2)
                                Case Spielmodi.Tor3Bauen
                                    F.Variablen(0).Wert = F.Variablen(0).Wert - 4
                                    F.Bauen(Objektverwalter.EinheitenMenü.Tags(Objektverwalter.EinheitenMenü.GetCursorPosition), F.Rechteck.X + 1, F.Rechteck.Y + 2)
                            End Select
                        Else
                            If Objektverwalter.EinheitenMenü.Enabled(Objektverwalter.EinheitenMenü.GetCursorPosition) = False Then
                                'Wir können diese Einheit bauen
                                'Bevor wir sie Bauen müssen wir noch schnell Autospeichern, damit man diese  Einheit bauen zurückmachen kann.
                                Objektverwalter.Autospeichern()
                                Dim Ziehen As Boolean = False
                                If Objektverwalter.Spielfeld.AktuellerSpieler.KOS(0).IsInKOZone(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y) Then
                                    Ziehen = Objektverwalter.Spielfeld.AktuellerSpieler.KOS(0).NachBauZiehen
                                End If
                                Objektverwalter.EinheitBauen(Objektverwalter.EinheitenMenü.Tags(Objektverwalter.EinheitenMenü.GetCursorPosition).Split(" "), Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y, Not Ziehen, False)
                            Else
                                'Wir können sie nicht bauen
                                Exit Sub
                            End If
                            Hauptmenü.CursorPlazieren(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X * Hauptmenü.Feldbreite, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y * Hauptmenü.Feldbreite)
                        End If
                    End If
                ElseIf Spielmodus = Spielmodi.FlugzeugTrägerBauen Then
                    If Objektverwalter.EinheitenMenü.Enabled(Objektverwalter.EinheitenMenü.GetCursorPosition) = False Then
                        'Wir können diese Einheit bauen
                        'Bevor wir sie Bauen müssen wir noch schnell Autospeichern, damit man diese  Einheit bauen zurückmachen kann.
                        Objektverwalter.Autospeichern()
                        Dim Ziehen As Boolean = False
                        If Objektverwalter.Spielfeld.AktuellerSpieler.KOS(0).IsInKOZone(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y) Then
                            Ziehen = Objektverwalter.Spielfeld.AktuellerSpieler.KOS(0).NachBauZiehen
                        End If

                        Objektverwalter.EinheitBauenFlugzeugträger(Objektverwalter.EinheitenMenü.Tags(Objektverwalter.EinheitenMenü.GetCursorPosition).Split(" "), Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y, Not Ziehen, False)
                    Else
                        'Wir können sie nicht bauen
                        Exit Sub
                    End If
                ElseIf Objektverwalter.Spielfeld.AktuelleEinheit.Fähigkeit.Split("+").Contains("Bauen") Then
                    'Wir wollen ein Gebäude bauen.
                    If Objektverwalter.EinheitenMenü.Enabled(Objektverwalter.EinheitenMenü.GetCursorPosition) = False Then
                        Dim ID As String = GetGebäudeID(Objektverwalter.EinheitenMenü.Tags(Objektverwalter.EinheitenMenü.GetCursorPosition))
                        'Wir können das Gebäude bauen.
                        If Not Objektverwalter.Spielfeld.Laufen Is Nothing Then
                            Objektverwalter.GebäudeBauen(Objektverwalter.Spielfeld.Laufen.Position.X, Objektverwalter.Spielfeld.Laufen.Position.Y, ID)
                        Else
                            Objektverwalter.GebäudeBauen(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y, ID)
                        End If
                    Else
                        Exit Sub
                    End If
                ElseIf Objektverwalter.Spielfeld.AktuelleEinheit.Ladung.Length > 0 Then
                    If IsNothing(Objektverwalter.Spielfeld.AktuelleEinheit.Ladung(0)) = False Then
                        'Wir haben eine Einheit die eine andere ausladen will
                        Spielmodus = Spielmodi.Entladen
                        Dim Einheit As Integer = -1
                        For I = 0 To Objektverwalter.EinheitenMenü.Tags.Length - 1
                            If Objektverwalter.EinheitenTextur.GetUnitID(ObjektLadeklasse.GetIDFromName(Objektverwalter.EinheitenMenü.Tags(I))) >= 0 Then
                                Einheit += 1
                            End If
                            If I = Objektverwalter.EinheitenMenü.GetCursorPosition Then
                                ZuentladendeEinheit = Einheit
                                Exit For
                            End If
                        Next
                        Objektverwalter.EntladungAnzeigen(ZuentladendeEinheit)
                    End If
                End If
        End Select
        'Wir machen das Auswahlmenü weg
        If Auswahlmenülöschen = True Then
            If Objektverwalter.EinheitenMenü IsNot Nothing Then
                If Spielmodus = Spielmodi.Nichts Then
                    Hauptmenü.CursorPlazieren(Objektverwalter.EinheitenMenü.Feldpunkt.X * Hauptmenü.Feldbreite, Objektverwalter.EinheitenMenü.Feldpunkt.Y * Hauptmenü.Feldbreite)
                End If
                Objektverwalter.EinheitenMenü = Nothing
            End If
            ObjektMaus.Visible = True
        End If
    End Sub
   

    ''' <summary>
    ''' Holt aus dem String des Gebäudebaumenüs die GebäudeID heraus
    ''' </summary>
    ''' <remarks></remarks>
    Private Function GetGebäudeID(ByVal Text As String) As String
        Text = Text.Remove(Text.LastIndexOf(" "))
        Select Case Text
            Case "Mauer bauen"
                Return "MAUER"
            Case "Brücke bauen"
                Return "BRÜCKE"
            Case "Rakete bauen"
                Return "SILO"
            Case "Minigeschütz Nord bauen"
                Return "MINIGESCHÜTZ+N"
            Case "Minigeschütz Ost bauen"
                Return "MINIGESCHÜTZ+O"
            Case "Minigeschütz Süd bauen"
                Return "MINIGESCHÜTZ+S"
            Case "Minigeschütz West bauen"
                Return "MINIGESCHÜTZ+W"
            Case "Laser bauen"
                Return "LASER"
            Case "Kristall bauen"
                Return "KRISTALL"
            Case "Schwarze Geschütz Nord bauen"
                Return "SCHWARZE GESCHÜTZ+N"
            Case "Schwarze Geschütz Süd bauen"
                Return "SCHWARZE GESCHÜTZ+S"
            Case "Schwarze Geschütz West bauen"
                Return "SCHWARZE GESCHÜTZ+W"
            Case "Schwarze Geschütz Ost bauen"
                Return "SCHWARZE GESCHÜTZ+O"
            Case "Schocklaser Nord bauen"
                Return "SCHOCKLASER+N"
            Case "Schocklaser Süd bauen"
                Return "SCHOCKLASER+S"
            Case "Schocklaser West bauen"
                Return "SCHOCKLASER+W"
            Case "Schocklaser Ost bauen"
                Return "SCHOCKLASER+O"
            Case "Monolith bauen"
                Return "MONOLITH"
            Case "Omega-Rakete bauen"
                Return "OMEGARAKETE"
            Case "Festung bauen"
                Return "FESTUNG"
            Case "Fliegendes Minigeschütz Nord bauen"
                Return "FLIEGENDESMINIGESCHÜTZ+N"
            Case "Fliegendes Minigeschütz Ost bauen"
                Return "FLIEGENDESMINIGESCHÜTZ+O"
            Case "Fliegendes Minigeschütz Süd bauen"
                Return "FLIEGENDESMINIGESCHÜTZ+S"
            Case "Fliegendes Minigeschütz West bauen"
                Return "FLIEGENDESMINIGESCHÜTZ+W"
            Case "Fliegende Festung bauen"
                Return "FLIEGENDEFESTUNG"
            Case Else
                Return ""
        End Select
    End Function
    ''' <summary>
    ''' Zeigt den Feuerradius einer Einheit an
    ''' </summary>
    ''' <param name="X">ihre X Koordinate im Array</param>
    ''' <param name="Y">ihre Y Koordinate im Array</param>
    ''' <remarks></remarks>
    Public Sub FeuerradiusAnzeigen(ByVal X As Integer, ByVal Y As Integer)
        Dim E As ObjektEinheit = Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht)
        If E.Waffe1 <> "Keine" Or E.Waffe2 <> "Keine" Then
            Spielmodus = Spielmodi.FeuerradiusAnzeigen
            'Wir zeigen den Nahkampf an
            'Wir haben eine Nahkampfeinheit
            Dim WSS As Wegsuchsystem
            Dim Bewegunspunkte As Integer = Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).GetMovementRange
            If Bewegunspunkte <= Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Treibstoff Then
                WSS = New Wegsuchsystem(Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht), X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht, Bewegunspunkte)
            ElseIf Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Treibstoff = -1 Then
                WSS = New Wegsuchsystem(Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht), X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht, Bewegunspunkte)
            Else
                WSS = New Wegsuchsystem(Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht), X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht, Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Treibstoff)
            End If
            Dim MaximaleReichweite As Integer = Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).MaximaleReichweite
            Dim MinimaleReichweite As Integer = Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).MinimaleReichweite
            Dim Kreis(,) As Integer = Kreisfunktion(MaximaleReichweite)

            For Y1 = 0 To Objektverwalter.Spielfeld.Höhe - 1
                For X1 = 0 To Objektverwalter.Spielfeld.Breite - 1
                    Dim Kosten As Integer = WSS.getBewegungspunktekosten(X1, Y1)
                    If Kosten >= 0 And Kosten <= Bewegunspunkte Then
                        If Kosten = 0 Then
                            For X2 = 0 To MaximaleReichweite * 2
                                For Y2 = 0 To MaximaleReichweite * 2
                                    If Kreis(X2, Y2) >= MinimaleReichweite Then
                                        Objektverwalter.neuMarkiertesFeld(X1 - MaximaleReichweite + X2, Y1 - MaximaleReichweite + Y2, Color.FromArgb(150, 255, 255, 255), "Rot")
                                    End If
                                Next
                            Next
                            If E.Waffe1 <> "Keine" Or E.MinimaleReichweite = 1 Then
                                Objektverwalter.neuMarkiertesFeld(X1, Y1, Color.FromArgb(150, 255, 255, 255), "Rot")
                            End If
                        Else
                            If E.CanIndirectMoveAndFire Then
                                For X2 = 0 To MaximaleReichweite * 2
                                    For Y2 = 0 To MaximaleReichweite * 2
                                        If Kreis(X2, Y2) >= MinimaleReichweite Then
                                            Objektverwalter.neuMarkiertesFeld(X1 - MaximaleReichweite + X2, Y1 - MaximaleReichweite + Y2, Color.FromArgb(150, 255, 255, 255), "Rot")
                                        End If
                                    Next
                                Next
                            ElseIf E.Waffe1 <> "Keine" Or E.MinimaleReichweite = 1 Then
                                Objektverwalter.neuMarkiertesFeld(X1, Y1, Color.FromArgb(150, 255, 255, 255), "Rot")
                            End If
                        End If
                    ElseIf E.Waffe1 <> "Keine" Or E.MinimaleReichweite = 1 Then
                        Dim X2 As Integer = X1
                        Dim Y2 As Integer = Y1
                        For I = 0 To 3
                            Select Case I
                                Case 0
                                    X2 -= 1
                                Case 1
                                    X2 += 1
                                    Y2 -= 1
                                Case 2
                                    X2 += 1
                                    Y2 += 1
                                Case 3
                                    X2 -= 1
                                    Y2 += 1
                            End Select
                            If X2 >= 0 And Y2 >= 0 And X2 < Objektverwalter.Spielfeld.Breite And Y2 < Objektverwalter.Spielfeld.Höhe Then
                                Kosten = WSS.getBewegungspunktekosten(X2, Y2)
                                If Kosten >= 0 And Kosten <= Bewegunspunkte Then
                                    Objektverwalter.neuMarkiertesFeld(X1, Y1, Color.FromArgb(150, 255, 255, 255), "Rot")
                                    Exit For
                                End If
                            End If
                        Next
                    End If
                Next
            Next
            MusikEngine.LoadWav(My.Settings.Resourcenpfad + "Sound\Einheitausgewählt.wav", False)
        End If
    End Sub
    Public Sub CursorVerschieben(ByVal XVeränderung As Integer, ByVal YVeränderung As Integer)
        MusikEngine.LoadWav(My.Settings.Resourcenpfad + "Sound\Feld Wechsel.wav", False)
        Select Case Spielmodus
            Case Spielmodi.AuswahlmenüEinheit
                If IsNothing(Objektverwalter.EinheitenMenü) = False Then
                    If YVeränderung > 0 Then
                        Objektverwalter.EinheitenMenü.CursorpositionVerändern(1, 0)
                    ElseIf YVeränderung < 0 Then
                        Objektverwalter.EinheitenMenü.CursorpositionVerändern(-1, 0)
                    End If
                    If XVeränderung > 0 Then
                        Objektverwalter.EinheitenMenü.CursorpositionVerändern(0, 1)
                    ElseIf XVeränderung < 0 Then
                        Objektverwalter.EinheitenMenü.CursorpositionVerändern(0, -1)
                    End If
                End If
            Case Spielmodi.Gebäudeausgewählt
            Case Else
                Dim X As Integer = Hauptmenü.SpielfeldPunkt.X + XVeränderung
                Dim Y As Integer = Hauptmenü.SpielfeldPunkt.Y + YVeränderung
                X = X * Hauptmenü.Feldbreite : Y = Y * Hauptmenü.Feldbreite
                Hauptmenü.CursorPlazieren(X, Y)
                RandVerschieben()
        End Select
    End Sub
    Public Shared Sub RandVerschieben()

    End Sub
    ''' <summary>
    ''' Gibt der ausgewählte Einheit den Befehl auf das ausgewählte Feld zuziehen
    ''' </summary>
    ''' <param name="X"></param>
    ''' <param name="Y"></param>
    ''' <remarks></remarks>
    Public Sub EinheitBewegungsBefehl(ByVal X As Integer, ByVal Y As Integer)
        'Die Einheit gehört uns
        If Not Objektverwalter.Spielfeld.AktuelleEinheit Is Nothing Then
            If Objektverwalter.Spielfeld.AktuelleEinheit.Spieler = Objektverwalter.Spielfeld.AktuellerSpieler.Spieler Then
                If Objektverwalter.Spielfeld.AktuellerSpieler.KIStufe = ObjektSpieler.KIStufen.Mensch Then
                    'Die Koordinaten sind manchmal nicht exakt mit der Cursor Position! Liegt wahrscheinlich an der Synchro
                    X = Hauptmenü.SpielfeldPunkt.X
                    Y = Hauptmenü.SpielfeldPunkt.Y
                End If
                If Objektverwalter.Spielfeld.AktuelleEinheitPosition.X = X And Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y = Y Then
                    If Objektverwalter.Spielfeld.AktuellerSpieler.KIStufe = ObjektSpieler.KIStufen.Mensch Then
                        'Die Einheit bleibt auf diesem Feld
                        Objektverwalter.Befehlsmenüerschaffen()
                    Else
                        'Objektverwalter.Spielfeld.KI.KISchleifeZiehen()
                    End If
                Else
                    'Es ist ein anderes Feld
                    'Dann wird sie zu diesem Feld hin bewegt
                    If IsNothing(Objektverwalter.Spielfeld.Laufen) = True Then
                        MoveUnit(X, Y)
                    ElseIf Not Objektverwalter.Spielfeld.KI Is Nothing Then
                        Objektverwalter.Spielfeld.LaufenLöschen = False
                        MoveUnit(X, Y)
                    End If
                End If
            End If
        End If
    End Sub
    Private Sub MoveUnit(ByVal X As Integer, ByVal Y As Integer)
        If Objektverwalter.Spielfeld.Wegsuchsystem.WegpunkteX.Length > 0 Then
            If IsNothing(Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht)) = True Then
                'Wir können sogar hin Laufen na dann auf
                Objektverwalter.Spielfeld.Einheiten(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y, Objektverwalter.Spielfeld.MomentaneSchlacht) = Nothing
                Objektverwalter.Spielfeld.Laufen = New ObjektLaufen(Objektverwalter.Spielfeld.AktuelleEinheit, Objektverwalter.Spielfeld.Wegsuchsystem.WegpunkteX, Objektverwalter.Spielfeld.Wegsuchsystem.WegpunkteY, New Point(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y))
            Else
                If Objektverwalter.Spielfeld.AktuelleEinheit.Bewegungsart = MovementSorts.Höllium.tostring Then
                    If IsNothing(Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht)) Then
                        Objektverwalter.Spielfeld.Einheiten(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y, Objektverwalter.Spielfeld.MomentaneSchlacht) = Nothing
                        Objektverwalter.Spielfeld.Laufen = New ObjektLaufen(Objektverwalter.Spielfeld.AktuelleEinheit, Objektverwalter.Spielfeld.Wegsuchsystem.WegpunkteX, Objektverwalter.Spielfeld.Wegsuchsystem.WegpunkteY, New Point(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y))
                    ElseIf Not Objektverwalter.Spielfeld.Spieler(Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Spieler).Team = Objektverwalter.Spielfeld.Spieler(Objektverwalter.Spielfeld.AktuelleEinheit.Spieler).Team Then
                        Objektverwalter.Spielfeld.Einheiten(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y, Objektverwalter.Spielfeld.MomentaneSchlacht) = Nothing
                        Objektverwalter.Spielfeld.Laufen = New ObjektLaufen(Objektverwalter.Spielfeld.AktuelleEinheit, Objektverwalter.Spielfeld.Wegsuchsystem.WegpunkteX, Objektverwalter.Spielfeld.Wegsuchsystem.WegpunkteY, New Point(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y))
                    End If
                ElseIf Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).EinheitenID = Objektverwalter.Spielfeld.AktuelleEinheit.EinheitenID And Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).getKP <= 9 Then
                    'Wir können sogar hin Laufen na dann auf und dann Einen
                    Objektverwalter.Spielfeld.Einheiten(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y, Objektverwalter.Spielfeld.MomentaneSchlacht) = Nothing
                    Objektverwalter.Spielfeld.Laufen = New ObjektLaufen(Objektverwalter.Spielfeld.AktuelleEinheit, Objektverwalter.Spielfeld.Wegsuchsystem.WegpunkteX, Objektverwalter.Spielfeld.Wegsuchsystem.WegpunkteY, New Point(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y))
                ElseIf Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).IsLoadable(Objektverwalter.Spielfeld.AktuelleEinheit) Then
                    Objektverwalter.Spielfeld.Einheiten(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y, Objektverwalter.Spielfeld.MomentaneSchlacht) = Nothing
                    Objektverwalter.Spielfeld.Laufen = New ObjektLaufen(Objektverwalter.Spielfeld.AktuelleEinheit, Objektverwalter.Spielfeld.Wegsuchsystem.WegpunkteX, Objektverwalter.Spielfeld.Wegsuchsystem.WegpunkteY, New Point(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y))
                ElseIf Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Sichtbar = False Then
                    Objektverwalter.Spielfeld.Einheiten(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y, Objektverwalter.Spielfeld.MomentaneSchlacht) = Nothing
                    Objektverwalter.Spielfeld.Laufen = New ObjektLaufen(Objektverwalter.Spielfeld.AktuelleEinheit, Objektverwalter.Spielfeld.Wegsuchsystem.WegpunkteX, Objektverwalter.Spielfeld.Wegsuchsystem.WegpunkteY, New Point(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y))
                ElseIf IsNothing(Objektverwalter.Spielfeld.KI) Then

                End If
            End If
        End If
    End Sub
    Public Sub SPSchadenAnzeigen()
        If Hauptmenü.Formmodus = Hauptmenü.Formmodi.Spiel Then
            If Hauptmenü.SpielfeldPunkt.X >= 0 And Hauptmenü.SpielfeldPunkt.Y >= 0 And Hauptmenü.SpielfeldPunkt.Y < Objektverwalter.Spielfeld.Höhe And Hauptmenü.SpielfeldPunkt.X < Objektverwalter.Spielfeld.Breite Then
                Dim Neu As Boolean = False
                If IsNothing(Objektverwalter.Spielfeld.AngriffsAnzeige) = False Then
                    If Not Hauptmenü.SpielfeldPunkt.X = (Objektverwalter.Spielfeld.AngriffsAnzeige.Koordinaten.X - Objektverwalter.Spielfeld.BildschirmKooX + Hauptmenü.Feldbreite) / Hauptmenü.Feldbreite Then
                        Neu = True
                    ElseIf Not Hauptmenü.SpielfeldPunkt.Y = (Objektverwalter.Spielfeld.AngriffsAnzeige.Koordinaten.Y + 24 + Hauptmenü.Feldbreite - Objektverwalter.Spielfeld.BildschirmKooY) / Hauptmenü.Feldbreite Then
                        Neu = True
                    End If
                Else
                    Neu = True
                End If
                If Spielmodus = Spielmodi.Angriff Then
                    If Objektverwalter.ExistiertMarkiertesFeldschon(Hauptmenü.SpielfeldPunkt.X, Hauptmenü.SpielfeldPunkt.Y) Then
                        If Neu = True Then
                            Dim S As ObjektSpieler = Objektverwalter.Spielfeld.AktuelleEinheit.GetSpieler
                            If S.KOS(0).SpriteVertauschung = True And S.Team <> Objektverwalter.Spielfeld.Spieler(Objektverwalter.Spielfeld.Regeln.LetzterMensch).Team Then
                                Dim Schaden() As String = {Zufallszahl(0, 100).ToString}
                                Dim X As Integer = 2
                                If Schaden(0).Count = 2 Then
                                    X += 6
                                ElseIf Schaden(0).Count = 1 Then
                                    X += 12
                                End If
                                Objektverwalter.Spielfeld.AngriffsAnzeige = New ObjektLabel(Hauptmenü.SpielfeldPunkt.X * Hauptmenü.Feldbreite + Objektverwalter.Spielfeld.BildschirmKooX - Hauptmenü.Feldbreite, Hauptmenü.SpielfeldPunkt.Y * Hauptmenü.Feldbreite - 24 - Hauptmenü.Feldbreite + Objektverwalter.Spielfeld.BildschirmKooY, My.Settings.Resourcenpfad + "Objekte\SchadenLabel.png", Schaden, New Point(X, 8), 10, 7, New PointF)
                            Else
                                Dim Fernkampf As Boolean = False
                                Dim X1, Y1 As Integer
                                If IsNothing(Objektverwalter.Spielfeld.Laufen) Then
                                    X1 = Objektverwalter.Spielfeld.AktuelleEinheitPosition.X : Y1 = Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y
                                    If Math.Abs(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X - Hauptmenü.SpielfeldPunkt.X) + Math.Abs(Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y - Hauptmenü.SpielfeldPunkt.Y) > 1 Then
                                        Fernkampf = True
                                    End If
                                Else
                                    X1 = Objektverwalter.Spielfeld.Laufen.Position.X : Y1 = Objektverwalter.Spielfeld.Laufen.Position.Y
                                    If Math.Abs(Objektverwalter.Spielfeld.Laufen.Position.X - Hauptmenü.SpielfeldPunkt.X) + Math.Abs(Objektverwalter.Spielfeld.Laufen.Position.Y - Hauptmenü.SpielfeldPunkt.Y) > 1 Then
                                        Fernkampf = True
                                    End If
                                End If
                                Dim AngreiferLeben As Integer = Objektverwalter.Spielfeld.AktuelleEinheit.Leben
                                Dim VerteidigerLeben As Integer = 0
                                If IsNothing(Objektverwalter.Spielfeld.Einheiten(Hauptmenü.SpielfeldPunkt.X, Hauptmenü.SpielfeldPunkt.Y, Objektverwalter.Spielfeld.MomentaneSchlacht)) = False Then
                                    VerteidigerLeben = Objektverwalter.Spielfeld.Einheiten(Hauptmenü.SpielfeldPunkt.X, Hauptmenü.SpielfeldPunkt.Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Leben
                                ElseIf Objektverwalter.Spielfeld.Landschaften(Hauptmenü.SpielfeldPunkt.X, Hauptmenü.SpielfeldPunkt.Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Leben > 0 Then
                                    VerteidigerLeben = Objektverwalter.Spielfeld.Landschaften(Hauptmenü.SpielfeldPunkt.X, Hauptmenü.SpielfeldPunkt.Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Leben
                                ElseIf IsNothing(Objektverwalter.Spielfeld.Landschaften(Hauptmenü.SpielfeldPunkt.X, Hauptmenü.SpielfeldPunkt.Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude) = False Then
                                    VerteidigerLeben = Objektverwalter.Spielfeld.Landschaften(Hauptmenü.SpielfeldPunkt.X, Hauptmenü.SpielfeldPunkt.Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude.KP
                                End If
                                Dim Schaden() As String = {CInt(Objektverwalter.Schadensberechnung(Objektverwalter.Spielfeld.AktuelleEinheit, X1, Y1, Hauptmenü.SpielfeldPunkt.X, Hauptmenü.SpielfeldPunkt.Y, AngreiferLeben, VerteidigerLeben)(0))}
                                Dim X As Integer = 2
                                If Schaden(0).Count = 2 Then
                                    X += 6
                                ElseIf Schaden(0).Count = 1 Then
                                    X += 12
                                End If

                                Objektverwalter.Spielfeld.AngriffsAnzeige = New ObjektLabel(Hauptmenü.SpielfeldPunkt.X * Hauptmenü.Feldbreite + Objektverwalter.Spielfeld.BildschirmKooX - Hauptmenü.Feldbreite, Hauptmenü.SpielfeldPunkt.Y * Hauptmenü.Feldbreite - 24 - Hauptmenü.Feldbreite + Objektverwalter.Spielfeld.BildschirmKooY, My.Settings.Resourcenpfad + "Objekte\SchadenLabel.png", Schaden, New Point(X, 8), 10, 7, New PointF)
                            End If
                            MusikEngine.LoadWav(My.Settings.Resourcenpfad + "Sound\Ziel.wav", False)
                        End If
                    Else
                        Objektverwalter.Spielfeld.AngriffsAnzeige = Nothing
                    End If
                ElseIf Spielmodus = Spielmodi.GebäudeSchuss Then
                    If Objektverwalter.ExistiertMarkiertesFeldschon(Hauptmenü.SpielfeldPunkt.X, Hauptmenü.SpielfeldPunkt.Y) Then
                        If Neu = True Then
                            Dim Schaden() As String = {Objektverwalter.Spielfeld.Landschaften(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebäude.Schaden * 10}
                            Dim X As Integer = 2
                            If Schaden(0).Count = 2 Then
                                X += 6
                            ElseIf Schaden(0).Count = 1 Then
                                X += 12
                            End If
                            Objektverwalter.Spielfeld.AngriffsAnzeige = New ObjektLabel(Hauptmenü.SpielfeldPunkt.X * Hauptmenü.Feldbreite + Objektverwalter.Spielfeld.BildschirmKooX - Hauptmenü.Feldbreite, Hauptmenü.SpielfeldPunkt.Y * Hauptmenü.Feldbreite - 24 - Hauptmenü.Feldbreite + Objektverwalter.Spielfeld.BildschirmKooY, My.Settings.Resourcenpfad + "Objekte\SchadenLabel.png", Schaden, New Point(X, 8), 10, 7, New PointF(0, 0))
                            MusikEngine.LoadWav(My.Settings.Resourcenpfad + "Sound\Ziel.wav", False)
                        End If
                    Else
                        Objektverwalter.Spielfeld.AngriffsAnzeige = Nothing
                    End If
                Else
                    Objektverwalter.Spielfeld.AngriffsAnzeige = Nothing
                End If
            End If
        End If
    End Sub

    Public Overrides Sub IniMenü()

    End Sub

    Public Overrides Sub SprachEingabe(ByVal Eingabe As String)
        If Objektverwalter.Spielfeld.EingabenErlauben = True Then
            Select Case Eingabe.ToLower
                Case "beenden"
                    SPStringBefehl(Eingabe)
                Case "nächster Spieler".ToLower
                    SPStringBefehl(Eingabe)
                Case "Speichern".ToLower
                    SPStringBefehl(Eingabe)
                Case "Kao Wechsel".ToLower
                    If Not Objektverwalter.Spielfeld.AktuellerSpieler.KOS(1) Is Nothing Then
                        SPStringBefehl("wechsel")
                    End If
                Case "nächste Einheit".ToLower
                    Objektverwalter.Spielfeld.NächsteEinheit()
                Case "schnellspeichern"
                    Hauptmenü.Speichern("Schnellspeichern", ".sav")
                Case "schnellladen"
                    If Objektverwalter.Spielfeld.EingabenErlauben Then 'Ich habe schlechte Erfahrungen gemacht, wenn man speichert, wenn die KI am Zug ist. Die wird nämlich nicht mitgeladen und schon kann man ewig darauf warten, dass der andere Spieler macht.
                        Objektverwalter.Autospeichern() 'Ich trau der Spracherkennung noch nicht so ganz über den Weg, obwohl ich sie selbst eingebaut habe, (Vielleicht auch gerade deswegen)(Von Spracherkennung selbst hab ich natürlich keine Ahnung aber ich habe heldenhaft die 3 Verweise gesetzt :)
                        'notfalls kann man ja mit Strg+Z wieder den Aktuellen stand laden
                        Hauptmenü.Laden("Schnellspeichern", False, ".sav")
                    End If
            End Select
        End If
    End Sub
    Public Overrides Sub ChangeWindowSize(ByVal PosChange As System.Drawing.Point)
        MyBase.ChangeWindowSizeObjekte(PosChange)
        If Chat IsNot Nothing Then
            Chat.ChangeWindowSize(PosChange)
        End If
        If Objektverwalter.Spielfeld IsNot Nothing Then
            If Objektverwalter.Spielfeld.KOInfos IsNot Nothing Then
                Objektverwalter.Spielfeld.KOInfos.ChangeWindowSize(PosChange)
            End If
        End If
        '...
    End Sub


    Public Sub Dispose()
        If My.Settings.AutoResizeWindow And My.Settings.Fenstermodus Then
            Hauptmenü.MainMenü.Size = OldSize
        End If
        Hauptmenü.Speichern("Spiel", ".sav")
        Hauptmenü.Ini(Hauptmenü.Formmodi.SiegMenü)
    End Sub

    Public Sub AutoResizeWindow()
        If My.Settings.AutoResizeWindow And My.Settings.Fenstermodus Then
            OldSize = Hauptmenü.MainMenü.Size
            Dim MinKartengröße As Integer = 15
            If Not Objektverwalter.Spielfeld Is Nothing Then
                Dim B As Integer = Objektverwalter.Spielfeld.Breite
                Dim H As Integer = Objektverwalter.Spielfeld.Höhe
                If B >= MinKartengröße Then
                    Hauptmenü.MainMenü.Width = Hauptmenü.Feldbreite * B + Hauptmenü.Rand.X
                Else
                    Hauptmenü.MainMenü.Width = MinKartengröße * Hauptmenü.Feldbreite + Hauptmenü.Rand.X
                End If
                If H >= MinKartengröße Then
                    Hauptmenü.MainMenü.Height = Hauptmenü.Feldbreite * H + Hauptmenü.Rand.Y
                Else
                    Hauptmenü.MainMenü.Height = MinKartengröße * Hauptmenü.Feldbreite + Hauptmenü.Rand.Y
                End If
            End If
        Else
            OldSize = New Size(Hauptmenü.MainMenü.MalPanel.Width, Hauptmenü.MainMenü.MalPanel.Height)
        End If
    End Sub

#Region "Aufzeichnungs Sachen"
    Public Sub AufzeichnungsMouseDown(ByVal E As System.Windows.Forms.MouseEventArgs)

    End Sub
    Public Sub AufzeichnungsMouseUp(ByVal E As System.Windows.Forms.MouseEventArgs)

    End Sub

#End Region
End Class
